package com.dubbo.common;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
 * 序列化工具
 * @author chenwei
 * @date 2018年2月27日 下午7:17:10
 */
public class SerializeUtil {
	/**
	 * 序列化
	 *  
	 * @author chenwei
	 * @date 2018年2月27日 下午7:17:03
	 * @param object
	 * @return
	 * @throws Exception 
	 */
	public static byte[] serialize(Object object) throws Exception {

		if (object == null) {
			return null;
		}
		ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
		try {
			ObjectOutputStream oos = new ObjectOutputStream(baos);
			oos.writeObject(object);
			oos.flush();
		}
		catch (IOException ex) {
			throw new IllegalArgumentException("无法序列化的对象类型: " + object.getClass(), ex);
		}
		return baos.toByteArray();


	}
	/**
	 * 反序列化
	 * 
	 * @author chenwei
	 * @date 2018年2月27日 下午7:16:50
	 * @param bytes
	 * @return
	 * @throws Exception 
	 */
	public static Object deserialize(byte[] bytes) throws Exception {

		if (bytes == null) {
			return null;
		}
		try {
			ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
			ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream);
			return ois.readObject();
		}
		catch (IOException ex) {
			throw new IllegalArgumentException("没有反序列化对象!", ex);
		}
		catch (ClassNotFoundException ex) {
			throw new IllegalStateException("无法序列化的对象类型", ex);
		}
	}
}
